/**
 * @PROJECT 
 * @DATE 2018年7月12日 下午8:14:35
 * @AUTHOR LUYU
 */
package com.kool.tlwp.excel;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import com.alibaba.fastjson.JSON;
import com.kool.tlwp.bean.IoFieldVo;
import com.kool.tlwp.bean.IoVo;
import com.kool.tlwp.util.DateUtils;
import com.kool.tlwp.util.FileUtils;
import com.kool.tlwp.util.PropertyUtils;
import com.kool.tlwp.util.StringUtils;

/**
 * @DESCRIBE 根据接口设计文档生成接口json文件
 * @AUTHOR LUYU
 * @DATE 2018年7月12日 下午8:14:35
 *
 */
public class ExcelToIo {
	public static void main(String[] args) {
		try {
			StringUtils.debug("开始");
			Properties prop = PropertyUtils.getSysPropFromRoot();
			String excelPath = prop.getProperty("IO_EXCEL_PATH");
			String toDir = prop.getProperty("DIR");

			ExcelToIo creater = new ExcelToIo();
			creater.generate(excelPath, toDir);
		} catch (Exception e) {
			StringBuilder sb = new StringBuilder();
			sb.append(e.getMessage());
			sb.append("\r\n");
			StackTraceElement[] es = e.getStackTrace();
			for (int i = 0; i < es.length; i++) {
				StackTraceElement element = es[i];
				sb.append(element.toString());
				sb.append("\r\n");
			}
			StringUtils.debug(sb.toString());
		}

	}

	/**
	 * @DESCRIBE 执行
	 * @DATE 2018年7月12日 下午8:15:13
	 *
	 * @param excelPath
	 * @param toDir
	 * @throws Exception
	 */
	public void generate(String excelPath, String toDir) throws Exception {
		ExcelReader er = new ExcelReader(excelPath);
		List<List<List<String>>> listSheet = er.read(0, 65535);

		String jsonDirPath = toDir + "\\" + DateUtils.getCurrentTimeString(DateUtils.FORMAT_DATE_AND_TIME_WITHOUT_SPLIT);
		for (List<List<String>> sheet : listSheet) {
			IoVo io = sheetToIoVo(sheet);
			String json = ioVoToJson(io);
			File fDir = new File(jsonDirPath);
			if (fDir.exists() == false) {
				fDir.mkdirs();
			}
			String jsonPath = jsonDirPath + "\\" + io.getBusinessLowName() + "\\" + io.getIoName() + ".json";
			FileUtils.writeFile(json, jsonPath, "UTF-8", false);
		}
	}

	/**
	 * @DESCRIBE 接口bean转成json字符串
	 * @DATE 2018年7月12日 下午8:33:35
	 *
	 * @param io
	 * @return
	 */
	private String ioVoToJson(IoVo io) {
		String json = JSON.toJSONString(io.getFields());
		return json;
	}

	/**
	 * @DESCRIBE 每张表格转换为一个接口
	 * @DATE 2018年7月12日 下午8:23:29
	 *
	 * @param sheet
	 * @return
	 */
	private IoVo sheetToIoVo(List<List<String>> sheet) {
		IoVo io = new IoVo();
		io.setIoName(sheet.get(0).get(1));
		io.setBusinessLowName(sheet.get(0).get(3));
		io.setChnBusinessName(sheet.get(0).get(5));

		List<IoFieldVo> fields = new ArrayList<>();
		for (int i = 2; i < sheet.size(); i++) {
			List<String> row = sheet.get(i);
			IoFieldVo field = rowToFieldVo(row);
			fields.add(field);
		}
		io.setFields(fields);
		return io;
	}

	/**
	 * @DESCRIBE 每行数据转换成字段定义
	 * @DATE 2018年7月12日 下午8:38:33
	 *
	 * @param row
	 * @return
	 */
	private IoFieldVo rowToFieldVo(List<String> row) {
		IoFieldVo field = new IoFieldVo();
		field.setFieldName(row.get(0));
		field.setJavaType(row.get(1));
		field.setChnName(row.get(2));
		field.setType(row.get(3));
		field.setGlobalDefine(row.get(4));
		field.setNullable(row.get(5));
		if (StringUtils.isEmpty(row.get(6)) == false) {
			field.setMaxLen(Integer.parseInt(row.get(6)));
		}
		if (StringUtils.isEmpty(row.get(7)) == false) {
			field.setMinLen(Integer.parseInt(row.get(7)));
		}
		if (StringUtils.isEmpty(row.get(8)) == false) {
			field.setMax(Integer.parseInt(row.get(8)));
		}
		if (StringUtils.isEmpty(row.get(9)) == false) {
			field.setMin(Integer.parseInt(row.get(9)));
		}
		field.setIsPK(row.get(10));
		return field;
	}
}
